//用于管理new模块的小仓库
import { defineStore } from 'pinia'  //引入创建pinia的方法

import { reqGetNews, reqGetRecommendNews, reqGetNewDetail } from '@/api/new/index'

const useNewStore = defineStore('new', {
    //state：仓库存储数据的地方
    state: () => ({
        sId: 1, // 新闻分类id
        page: 1,
        limit: 6,
        total: 0,
        pages: 0,
        newList: [] as any, // 新闻动态数据
        newDetail: {} as any, // 新闻详情
        recommendNewsList: [] as any, // 推荐新闻列表
        isLoading: false // 是否显示新闻列表加载动画
    }),

    //action：处理action，可以书写自己的业务逻辑,可以直接修改state
    actions: {
        // 新闻动态数据
        async getNews() {
            this.isLoading = true
            const data = {
                page: this.page,
                limit: this.limit,
                sId: this.sId
            }
            const result = await reqGetNews(data)
            if (result.code == 200) {
                this.newList = result.data.list
                this.total = result.data.total
                this.pages = result.data.pages
                this.isLoading = false
            }
        },
        async getNewDetail(id: number) {
            const result = await reqGetNewDetail(id)
            if (result.code == 200) {
                this.newDetail = result.data
            }
        },
        // 推荐新闻数据
        async getRecommendNews() {
            const result = await reqGetRecommendNews()
            if (result.code == 200) {
                this.recommendNewsList = result.data
            }
        },
        // 清除仓库
        clearNewStore() {
            this.sId = 1 // 新闻分类id
            this.page = 1
            this.limit = 6
            this.total = 0
            this.pages = 0
            this.newList = []// 新闻动态数据
            this.newDetail = {}// 新闻详情
            this.recommendNewsList = [] // 推荐新闻列表
            this.isLoading = false // 是否显示新闻列表加载动画
        }
    },

    //getters：可以理解为计算属性，用于简化仓库属性。让组件获取仓库数据更便捷
    getters: {
        homeNewsList(state) {
            return state.newList.splice(0, 3)
        }
    }
})

export default useNewStore